1. The Field of the Invention
The present invention relates to the field of distributed software applications. More particularly, embodiments of the invention relate to the process of failover in a cluster-unaware application operating in a clustered environment.
2. The Relevant Technology
The world is slowly and continually moving from being paper-based to being electronic-based. This evolution is apparent in almost every aspect of life, from the workplace, to government institutions, to home life. In each area, old paper-based methods of communication and storage are being replaced by electronic information. Businesses have replaced bulky paper files and expensive storage rooms with electronic files and searchable databases. Tax-payers are encouraged to submit returns electronically rather than in paper form, and email is rapidly becoming a principal form of communication.
There are several reasons for this transition, one of which is the convenience and accessibility of electronic systems. Email, for example, often arrives shortly after sending it, and information submitted electronically can be quickly formatted, processed, and stored without the inconvenience of manually reviewing each submission by hand.
As companies and personal users rely more and more on computers to store important information, there is an ever-increasing need for protection against hardware or software failure. As many a disappointed computer user can attest, a single failure can result in days or weeks of unplanned downtime and the loss of crucial information. Particularly for businesses, disrupted operations and unplanned downtime can result in decreased profitability. Due to these concerns, many business and consumers are taking measures to plan for and recover from hardware and software failure failures and other disasters that may affect their data.
One strategy of recovering from hardware and/or software failures is clustering, where computer systems and storage devices are interconnected within a local data center. Typically, such systems utilize a high speed connection, to ensure an almost instantaneous transfer of data between two devices in case of failure. Such clustering is used for various reasons, including increased reliability, availability, serviceability, and performance.
Clusters generally use local area networks and redundant interconnections. Using these connections, clusters can appear as a single, highly available system. Often the computer systems within a cluster, or nodes, use a common pool of storage devices, and the purpose of the cluster is to provide an alternative processing resource for the data on the shared storage devices in case of a failure in one of the computer systems or nodes.
Typically, each clustered computer system runs special software to coordinate the activities of the computer systems in the cluster, such as Microsoft Cluster Software™. Such software is referred to herein as a cluster manager. A cluster manager generally maintains a series of constant communication between the cluster nodes through the exchange of periodic messages called “heartbeats.” Additionally, if one of the nodes becomes unavailable as a result of failure or scheduled maintenance, the cluster manager instructs another node to begin providing service through a process called failover. Advantageously, this operation is generally transparent to the user since the applications and data running continue to be available through the use of the other nodes.
Cluster-aware applications are designed specifically for use in a clustered environment. Cluster aware applications are aware of other nodes and communicate with them. Conversely, many applications are cluster-unaware, meaning that the applications do not know if they are running in a cluster or on a single node. The existence of a cluster is completely transparent for cluster unaware applications. As a result, additional software and configuration is needed in order to successfully operate the application in a cluster. In fact, configuring cluster unaware applications for use in a clustered environment is an extremely technical process, requiring extensive trial and error in order to ensure that the applications are operating appropriately. There is therefore a need for systems and methods for configuring a cluster unaware application in a clustered environment and for failing over a cluster unaware application when a node fails. In other words, systems and methods are needed that can enable a cluster unaware application take advantage of the benefits that are associated with a clustered environment.